﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace TMS.formularios
{
    public partial class UIAdminUsuarios : System.Web.UI.Page
    {
        //Variable que guarda el tipo anterior del usuario a modificar.
        static string tipoAnterior;
        //Variable que guarda el nick del usuario que se desea modificar.
        static string nickUsu = "";

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //Vacia los cuadros de texto.
                limpiarForm();
                //Carga los nombres del enum tipoUsuario en la DropDownList ddRolUsuario.
                ddRolUsuario.DataSource = Enum.GetNames(typeof(tipoUsuario));
                ddRolUsuario.DataBind();
                //Carga las listas de usuarios.
                loadListActivos();
                loadListInactivos();
                //Deshabilita los botones.
                btnActivar.Enabled = false;
                btnEliminar.Enabled = false;
                btnEliminarSel.Enabled = false;
                btnModificar.Enabled = false;
            }
        }
        public void limpiarForm()
        {
            lblNroUsuario.Text = "";
            txtNombre.Text = "";
            txtNick.Text = "";
            txtContrasenia.Text = "";
            txtMail.Text = "";
        }
        public void loadListActivos()
        {
            lstUsuarios.Items.Clear();
            foreach (Usuario u in Dios.getInstancia().listarActivos())
            {
                ListItem l = new ListItem(u.ToString(), "" + u.NroUsuario);
                lstUsuarios.Items.Add(l);
            }
            lstUsuarios.SelectedIndex = -1;
        }
        public void loadListInactivos()
        {
            lstUsuariosPendientes.Items.Clear();
            foreach (Usuario u in Dios.getInstancia().listarInactivos())
            {
                ListItem l = new ListItem(u.ToString(), "" + u.NroUsuario);
                lstUsuariosPendientes.Items.Add(l);
            }
            lstUsuariosPendientes.SelectedIndex = -1;
        }

        protected void lstUsuariosPendientes_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Activa los botones al seleccionar un item del listbox.
            btnActivar.Enabled = true;
            btnEliminar.Enabled = true;


        }

        protected void lstUsuarios_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Activa los botones al seleccionar un item del listbox.
            btnModificar.Enabled = true;
            btnEliminarSel.Enabled = true;
            //Obtiene una instancia de Usuario con los datos correspondientes al Id del usuario que se selecciono.
            Usuario unUsu = Dios.getInstancia().getUsuarioById(long.Parse(lstUsuarios.SelectedValue));
            //Carga los datos del usuario seleccionado en los cuadros de texto del formulario.
            lblNroUsuario.Text = "" + unUsu.NroUsuario;
            txtNombre.Text = unUsu.Nombre;
            txtNick.Text = unUsu.Nick;
            nickUsu = unUsu.Nick; //Se carga la variable de la clase nickUsu, por posibles modificaciones al nick del usuario.
            txtContrasenia.Text = unUsu.Password;
            txtMail.Text = unUsu.Mail;
            //Selecciona en el DDL "Tipo de Usuario" el rol correspondiente.
            tipoAnterior = Usuario.getTipoUsuario(unUsu.NroUsuario);
            ddRolUsuario.SelectedIndex = ddRolUsuario.Items.IndexOf(ddRolUsuario.Items.FindByText(tipoAnterior));
        }

        protected void btnActivar_Click(object sender, EventArgs e)
        {
            //Verifica que se haya seleccionado un item en el listbox.
            if (lstUsuariosPendientes.SelectedIndex != -1)
            {
                Dios.getInstancia().activarUsuario(long.Parse(lstUsuariosPendientes.SelectedValue));
                loadListActivos();
                loadListInactivos();
            }
        }

        protected void btnEliminar_Click(object sender, EventArgs e)
        {
            //Verifica que se haya seleccionado un item en el listbox.
            if (lstUsuariosPendientes.SelectedIndex != -1)
            {
                Dios.getInstancia().removeUsuario(long.Parse(lstUsuariosPendientes.SelectedValue));
                loadListActivos();
                loadListInactivos();
            }
        }

        protected void btnModificar_Click(object sender, EventArgs e)
        {
            if (lstUsuarios.SelectedIndex != -1)
            {
                lblAdvertencia.Text = "";
                /*
                 * Se verifica que si se cambio el nombre de usuario, el nuevo nombre no sea utilizado ya por otro usuario, 
                 * 
                 */
                if ((txtNombre.Text != nickUsu && !Dios.getInstancia().existeUsuario("" + txtNick.Text)) || txtNick.Text == nickUsu)
                {
                    long id = long.Parse(lblNroUsuario.Text);
                    string nom = txtNombre.Text;
                    string nic = txtNick.Text;
                    string pass = txtContrasenia.Text;
                    string mail = txtMail.Text;
                    string tipo = "" + ddRolUsuario.SelectedItem;
                    Dios.getInstancia().modUsuario(id, nom, nic, pass, mail, tipo, tipoAnterior);
                    loadListActivos();
                }
                else
                {
                    lblAdvertencia.Text = "Ese nombre de usuario ya esta siendo utilizado por otra persona...";
                }
            }
        }

        protected void btnEliminarSel_Click(object sender, EventArgs e)
        {
            if (lstUsuarios.SelectedIndex != -1)
            {
                Dios.getInstancia().removeUsuario(long.Parse(lstUsuarios.SelectedValue));
                loadListActivos();
            }
        }
    }
}